package StackArray

type StackArray interface {
	Clear()                //清空
	Size() int             //大小
	Pop() interface{}      //弹出
	Push(data interface{}) //压入
	IsFull() bool          // 是否满了
	IsEmpty() bool         //是否为空
}

type Stack struct {
	dataSource  []interface{}
	capSize     int //最大范围
	currentSize int //实际使用大小
}

func MyStack() *Stack {
	sk := new(Stack)
	sk.capSize = 1000
	sk.currentSize = 0
	sk.dataSource = make([]interface{}, 0, 1000)
	return sk
}

//清空
func (sk *Stack) Clear() {
	sk.dataSource = make([]interface{}, 0, 1000)
	sk.currentSize = 0
}

//大小
func (sk *Stack) Size() int {
	return sk.currentSize
}

//弹出
func (sk *Stack) Pop() interface{} {
	if !sk.IsEmpty() {
		val := sk.dataSource[sk.currentSize-1]           //取最后一个值
		sk.dataSource = sk.dataSource[:sk.currentSize-1] //删除最后一个
		sk.currentSize--                                 // 移动下表
		return val
	}
	return nil
}

//压入
func (sk *Stack) Push(data interface{}) {
	if !sk.IsFull() {
		sk.dataSource = append(sk.dataSource, data)
		sk.currentSize++
	}
}

// 是否满了
func (sk *Stack) IsFull() bool {
	if sk.capSize <= sk.currentSize {
		return true
	}
	return false
}

//是否为空
func (sk *Stack) IsEmpty() bool {
	if sk.currentSize == 0 {
		return true
	}
	return false
}
